package com.java90.homework.generate;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class MyGenerator {
    public static void main(String[] args) {
        AutoGenerator mpg = new AutoGenerator();

        //全局配置
        GlobalConfig gc = new GlobalConfig();
        //生成的文件输出目录
        gc.setOutputDir("D:\\zx\\homework\\src\\test\\java\\com\\java90\\homework\\generate\\output");

        gc.setFileOverride(true);  //是否覆盖文件
        gc.setActiveRecord(false); //是否设置ActiveRecord模式?
        gc.setEnableCache(false);  //是否开启二级缓存
        gc.setBaseResultMap(false); //是否设置基本的BaseResultMap?
        gc.setBaseColumnList(false);//是否开启BaseColumnList?
        gc.setAuthor("Jason");      //开发人员

        //自定义文件命名, 注意%s 会自动填充表实体属性, 如UserEntity
        gc.setMapperName("%sMapper");
        gc.setXmlName("%sMapper");
        gc.setServiceName("%sService");
        gc.setServiceImplName("%sServiceImpl");
        gc.setControllerName("%sController");
        mpg.setGlobalConfig(gc);//注入全局配置

        //数据源配置
        DataSourceConfig dsc = new DataSourceConfig();

        dsc.setDbType(DbType.MYSQL); //设置数据库类型
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("zx95271314");
        dsc.setUrl("jdbc:mysql://127.0.0.1:3306/homework?characterEncoding=utf8&useSSL=false&allowMultiQueries=true");
        //实现IDbQuery接口自定义数据库查询
        //dsc.setDbQuery(new IDbQuery);
        //数据库字段类型到Java类型, 默认由dbType类型决定对应的数据库内置实现, 可以实现ITypeConvert接口自定义
        //dsc.setTypeConvert(new ITypeConvert);
        mpg.setDataSource(dsc); //注入数据源配置


        //包配置
        PackageConfig packageConfig = new PackageConfig();
        //Entity包名
        packageConfig.setEntity("entity");
        //Mapper包名
        packageConfig.setMapper("dao");
        //Controller包名
        packageConfig.setController("controller");
        //Service包名
        packageConfig.setService("service");
        //ServiceImpl包名
        packageConfig.setServiceImpl("service.impl");
        //导入包名配置
        mpg.setPackageInfo(packageConfig);



        //数据库表策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        //使用lombok模式
        strategyConfig.setEntityLombokModel(true);
        //需要生成的表
        strategyConfig.setInclude("user");
        //字段名生成策略(下划线变驼峰法)
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);
        //生成@RestController控制器
        strategyConfig.setRestControllerStyle(true);


        //排除生成的表
        //strategyConfig.setExclude(new String[]{"t_rong_bid"});
        //修改表前缀
        //strategyConfig.setTablePrefix(new String[]{""});
        //表名生成策略
        //strategyConfig.setNaming(NamingStrategy.removePrefixAndCamel("", new String[]{""}));
        //自定义实体父类
        //strategyConfig.setSuperEntityClass("com.etalk.operate.pojo.AbstractBasicPojo");
        //自定义实体, 公共字段
        //strategyConfig.setSuperEntityColumns(new String[]{"id"});
        //自定义mapper 父类
        //strategyConfig.setSuperMapperClass("...");
        //自定义Service父类
        //strategyConfig.setSuperServiceClass("...");
        //自定义Service实现类父类
        //strategyConfig.setSuperServiceImplClass("...");
        //自定义controller父类
        //strategyConfig.setSuperControllerClass("...");
        // 【实体】是否生成字段常量（默认 false）
        // public static final String ID = "test_id";
        // strategyConfig.setEntityColumnConstant(true);
        // 【实体】是否为构建者模型（默认 false）
        // public User setName(String name) {this.name = name; return this;}
        // strategyConfig.setEntityBuliderModel(true);

        mpg.setStrategy(strategyConfig); //导入数据库表的策略设置

        //执行生成
        mpg.execute();
    }
}
